R

[R语言] apply函数

这是一篇关于R语言科学计算的技术文档

Posted by Leung ZhengHua on 2017-11-15

本文总点击量

最近在使用apply函数,想要往函数FUN里面输入多个参数再调用apply,下面是实验的结果:

apply

1
2
3
4
5
6
7
ryan=function(x,y,msg) {
return(paste0(x,y,msg))
}
ryan(5,6,"-hello")
apply(matrix(1:6,ncol = 1), 1, ryan,y=1:8,msg=c("-GOOD MORING",'-GOOD AFTERNOON','-GOOD NIGHT'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[,1] [,2] [,3] [,4] [,5]
[1,] "11-GOOD MORING" "21-GOOD MORING" "31-GOOD MORING" "41-GOOD MORING" "51-GOOD MORING"
[2,] "12-GOOD AFTERNOON" "22-GOOD AFTERNOON" "32-GOOD AFTERNOON" "42-GOOD AFTERNOON" "52-GOOD AFTERNOON"
[3,] "13-GOOD NIGHT" "23-GOOD NIGHT" "33-GOOD NIGHT" "43-GOOD NIGHT" "53-GOOD NIGHT"
[4,] "14-GOOD MORING" "24-GOOD MORING" "34-GOOD MORING" "44-GOOD MORING" "54-GOOD MORING"
[5,] "15-GOOD AFTERNOON" "25-GOOD AFTERNOON" "35-GOOD AFTERNOON" "45-GOOD AFTERNOON" "55-GOOD AFTERNOON"
[6,] "16-GOOD NIGHT" "26-GOOD NIGHT" "36-GOOD NIGHT" "46-GOOD NIGHT" "56-GOOD NIGHT"
[7,] "17-GOOD MORING" "27-GOOD MORING" "37-GOOD MORING" "47-GOOD MORING" "57-GOOD MORING"
[8,] "18-GOOD AFTERNOON" "28-GOOD AFTERNOON" "38-GOOD AFTERNOON" "48-GOOD AFTERNOON" "58-GOOD AFTERNOON"
[,6]
[1,] "61-GOOD MORING"
[2,] "62-GOOD AFTERNOON"
[3,] "63-GOOD NIGHT"
[4,] "64-GOOD MORING"
[5,] "65-GOOD AFTERNOON"
[6,] "66-GOOD NIGHT"
[7,] "67-GOOD MORING"
[8,] "68-GOOD AFTERNOON"

可以看到apply把第一个参数识别为x,参数ryan后面,跟着和x长度不同的参数y和msg,可以见到,apply遍历了每组参数下的结果,这正是我们想要的。

但是当ryan中的参数y是矩阵(或者向量)的时候,apply识别不出y是应该按单个元素输入,还是按整块矩阵输入。

比如下面这种:

1
2
3
4
5
6
7
8
ryan=function(x,y,msg) {
return(paste0(x,sum(y),msg))
}
ryan(5,6:9,c("-hello",', sir'))
apply(matrix(1:6,ncol = 1), 1, ryan,y=1:8,msg=c("-GOOD MORING",'-GOOD AFTERNOON','-GOOD NIGHT'))
1
2
3
4
5
6
7
8
9
10
[1] "530-hello" "530, sir"
[,1] [,2] [,3]
[1,] "136-GOOD MORING" "236-GOOD MORING" "336-GOOD MORING"
[2,] "136-GOOD AFTERNOON" "236-GOOD AFTERNOON" "336-GOOD AFTERNOON"
[3,] "136-GOOD NIGHT" "236-GOOD NIGHT" "336-GOOD NIGHT"
[,4] [,5] [,6]
[1,] "436-GOOD MORING" "536-GOOD MORING" "636-GOOD MORING"
[2,] "436-GOOD AFTERNOON" "536-GOOD AFTERNOON" "636-GOOD AFTERNOON"
[3,] "436-GOOD NIGHT" "536-GOOD NIGHT" "636-GOOD NIGHT"

解决办法可以考虑使用嵌套的apply函数